package tsing.javase.state_machine;

import com.alibaba.fastjson.JSON;

/**
 * 支付领域域服务
 */
public class PaymentDomainServiceImpl implements PaymentDomainService {

    /**
     * 支付结果通知
     */
    public void notify(PaymentNotifyMessage message) {
        // 加载支付事件模型
        PaymentModel paymentModel = loadPaymentModel(message.getPaymentId());
        try {

        	// 状态推进
        	paymentModel.transferStatusByEvent(PaymentEvent.valueOf(message.getEvent()));
        	// 保存模型
        	savePaymentModel(paymentModel);
        	// 其它业务处理

        }  catch (Exception e) {
            // 异常处理

        }
    }



    /**
     * 加载paymentmodel
     * @param paymentId
     * @return
     */
    private PaymentModel loadPaymentModel(String paymentId) {
        PaymentModel paymentModel = new PaymentModel();
        return paymentModel;
    }

    private void savePaymentModel(PaymentModel paymentModel) {

        // 一些逻辑处理
    }


    public static void main(String[] args) {

        // 测试状态机  ,假如当前的的状态时支付中，事件为支付成功 ，目标状态为：已支付

        PaymentModel model = new PaymentModel(PaymentStatus.PAYING);

        model.transferStatusByEvent(PaymentEvent.PAY_SUCCESS);

        System.out.println(JSON.toJSONString(model));

    }
}

